import tkinter as tk  
from tkinter import filedialog  
from tkinter import messagebox  
import os 
from docxtpl import DocxTemplate
from openpyxl import load_workbook  
class App:  

    srcFile = ""
    srcDataExcel = ""

    def __init__(self, root):  
        self.root = root  
        self.root.title("word批量生成器")  
        self.root.geometry("500x300")  
  
        # Word文件选择按钮  
        self.word_button = tk.Button(root, text="选择Word模版文件", command=self.select_word_file)  
        self.word_button.pack(side="left")  
  
        # Excel文件选择按钮  
        self.excel_button = tk.Button(root, text="选择Excel文件", command=self.select_excel_file)  
        self.excel_button.pack(side="left")  
  
        # 生成按钮（这里只是示例，你需要根据实际需求实现其功能）  
        self.generate_button = tk.Button(root, text="生成", command=self.generate)  
        self.generate_button.pack(side="left")  
  
    def select_word_file(self):  
        file_path = filedialog.askopenfilename(title="选择Word文件", filetypes=[("Word files", "*.doc;*.docx")])  
        if file_path:  
            print("Selected Word file:", file_path)  
            # 在这里添加处理Word文件的代码  
            self.srcFile = file_path
  
    def select_excel_file(self):  
        file_path = filedialog.askopenfilename(title="选择Excel文件", filetypes=[("Excel files", "*.xls;*.xlsx")])  
        if file_path:  
            print("Selected Excel file:", file_path)  
            # 在这里添加处理Excel文件的代码  
            self.srcDataExcel = file_path

    def render_docx_template(self, srcFile, distFile, content):  
        """  
        渲染Docx模板并保存结果。  
        参数:  
            srcFile (str): 源模板文件的路径。  
            distFile (str): 输出文件的路径。  
            content (dict): 渲染模板时使用的字典。  
        """  
        # 检查源文件是否存在  
        # if not os.path.exists(srcFile):  
        #     raise FileNotFoundError(f"源文件 {srcFile} 不存在。")  
          
        # 创建DocxTemplate对象  
        doc = DocxTemplate(srcFile)  

        # 渲染模板并保存结果  
        doc.render(content)  
        doc.save(distFile)

    def generate(self):  
        # 这里是生成按钮的功能，你需要根据实际需求实现它  
        if self.srcFile and self.srcDataExcel:
            _index = self.srcFile.rfind(".")
            # 加载Excel文件  
            workbook = load_workbook(filename=self.srcDataExcel)  
            # 获取第一个工作表  
            worksheet = workbook.active 
            # 遍历单元格并打印值  
            for row in worksheet.iter_rows(min_row=1):
                content={}
                for index, item in enumerate(row):  
                    # 获取单元格的列和行下标  
                    column_letter = worksheet.cell(row=item.row, column=item.column).column_letter  
                    row_number = item.row  
                    print(f"Column: {column_letter}, Value: {item.value}")
                    content[column_letter] = item.value

                if not content['A']:
                	continue
                	
                outputFile = self.srcFile[0:_index] + "-" + content['A'] + self.srcFile[_index:]
                print(outputFile, content)
                self.render_docx_template(self.srcFile, outputFile, content)

            # 重置
            self.srcFile = ""
            self.srcDataExcel = ""
            workbook.close()
            messagebox.showinfo("提示", "完成,请到模版文档所在的目录下查看") 
        else:
            messagebox.showinfo("提示", "请先选择文件")  

if __name__ == "__main__":
    root = tk.Tk()  
    app = App(root)  
    root.mainloop()

